// 1-3. 命名空间-不连续的命名空间
/**
 * C++ 命名空间
 * 假设这样一种情况，当一个班上有两个名叫 Zara 的学生时，为了明确区分它们，我们在使用名字之外，不得不使用一些额外的信息，比如他们的家庭住址，或者他们父母的名字等等。

 * 同样的情况也出现在 C++ 应用程序中。例如，您可能会写一个名为 xyz() 的函数，在另一个可用的库中也存在一个相同的函数 xyz()。这样，编译器就无法判断您所使用的是哪一个 xyz() 函数。

 * 因此，引入了命名空间这个概念，专门用于解决上面的问题，它可作为附加信息来区分不同库中相同名称的函数、类、变量等。使用了命名空间即定义了上下文。本质上，命名空间就是定义了一个范围。

 * 我们举一个计算机系统中的例子，一个文件夹(目录)中可以包含多个文件夹，每个文件夹中不能有相同的文件名，但不同文件夹中的文件可以重名。

                            文件夹A
                          ↙       ↘
                    文件夹B          文件夹C
                    ↙ ↘             ↙   ↘
            runoob-2   runoob      runoob   runoob-3
            .txt文件   .txt文件    .txt文件   .txt文件
                       |            |
                       —不同文件夹可以—
                        有相同名字的文件

 *-----------------------------------------
 * 不连续的命名空间
 * 命名空间可以定义在几个不同的部分中，因此命名空间是由几个单独定义的部分组成的。一个命名空间的各个组成部分可以分散在多个文件中。

 * 所以，如果命名空间中的某个组成部分需要请求定义在另一个文件中的名称，则仍然需要声明该名称。下面的命名空间定义可以是定义一个新的命名空间，也可以是为已有的命名空间增加新的元素：

            namespace namespace_name {
              // 代码声明
            }
*/

#include <iostream>
#include "./g_map.h"
#include "./g_position.h"

int main(void)
{
  using namespace g;
  Map m1;
  Map m2;
  Map m3;
  std::cout << "cur_map_id : " << cur_map_id << std::endl;
  std::cout << "cur_pos_id : " << cur_pos_id << std::endl;
  p_test();
  printf("-----------------end----------------\n");
  return 0;
}